#include "ConversionObject.h"
#include <QDebug>

ConversionObject::ConversionObject(QObject *parent)
    :QObject{parent}
{
    // qDebug()<<fileInfo->absoluteFilePath();//绝对路径（包含文件名）
    // qDebug()<<fileInfo->fileName();//文件名（包含后缀名）
    // qDebug()<<fileInfo->baseName();//文件名（不包含后缀名）
    // qDebug()<<fileInfo->suffix();//后缀名
    // qDebug()<<fileInfo->dir().absolutePath();//所在文件夹的绝对路径
}

void ConversionObject::startConversion(const QString& uicPath, const QSharedPointer<QList<QSharedPointer<QStringList>>>& startupArguments)
{
    QProcess* process = new QProcess(this);//程序对象

    // 连接信号readyReadStandardOutput()，以异步获取标准输出
    // connect(process,
    //         &QProcess::readyReadStandardOutput,
    //         this,
    //         [=]() {
    //             QByteArray output = process->readAllStandardOutput();
    //             qDebug() << "uic.exe运行输出:" << output.toStdString().c_str();
    //             // qDebug() << "uic.exe运行输出:" << QString(output);
    //         });

    // 连接信号finished()，在uic.exe运行完成后输出信息
    QObject::connect(process,
                     &QProcess::finished,
                     this,
                     [=](int exitCode, QProcess::ExitStatus exitStatus) {
                         // qDebug() << "uic.exe已退出，退出码:" << exitCode << ", 退出状态:" << exitStatus;
                         emit conversionFinished(exitCode,exitStatus);//发射转换完毕信号通知主线程
                     });

    for(auto& argument : *startupArguments)
    {

        qDebug()<<"启动参数："<<uicPath << *argument;
        process->start(uicPath, *argument);// 启动uic.exe
        process->waitForFinished(-1);//阻塞等uic.exe运行完成
    }

    // 全部文件转换完毕后断开信号连接，释放内存
    process->disconnect();
    process->deleteLater();
}
